package com.sky.service.rider.Impl;

import cn.hutool.core.date.DateException;
import com.sky.constant.MessageConstant;
import com.sky.dto.CourierTradeQueryDto;
import com.sky.dto.PickUpDTO;
import com.sky.mapper.Common.SortUrlMapper;
import com.sky.mapper.rider.CourierTradeOrderMapper;
import com.sky.mapper.user.OrdersMapper;
import com.sky.pojo.CourierTradeOrder;
import com.sky.pojo.Orders;
import com.sky.service.rider.TradeService;
import com.sky.vo.CourierTradeOrderVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;
import java.util.List;

@Slf4j
@Service
public class TradeServiceImpl implements TradeService {
    @Autowired
    private CourierTradeOrderMapper courierTradeOrderMapper;
    @Autowired
    private OrdersMapper ordersMapper;
    @Autowired
    private RedisTemplate redisTemplate;
    @Autowired
    private SortUrlMapper sortUrlMapper;

    @Override
    public void confirmPickUp(PickUpDTO pickUpDTO) {
        if (null==pickUpDTO ||null==pickUpDTO.getTradeNo()) {
            throw new DateException(MessageConstant.DATA_ERROR);
        }
        //根据运单号查运单
        CourierTradeOrder courierTradeOrder = courierTradeOrderMapper.selectTradeOrderBytradeNo(pickUpDTO.getTradeNo().toString());
        if (null==courierTradeOrder){
            throw new DateException(MessageConstant.DATA_ERROR);
        }
        if (pickUpDTO.getStatus()==3){
            courierTradeOrder.setWaybillStatus(pickUpDTO.getStatus());
            courierTradeOrderMapper.updetById(courierTradeOrder);
            //根据订单号查订单并修改状态
            Orders orders = new Orders();
            orders.setStatus(Orders.TOBEDELIVERED);
            ordersMapper.update(orders);
        }

        if (pickUpDTO.getStatus()==4){
            courierTradeOrder.setWaybillStatus(pickUpDTO.getStatus());
            courierTradeOrder.setTradeCompleteTime(LocalDateTime.now());
            courierTradeOrderMapper.updetById(courierTradeOrder);
            //根据订单号查订单并修改状态
            Orders orders = ordersMapper.selectByTraNo(pickUpDTO.getTradeNo());
            orders.setStatus(Orders.COMPLETE_ORDER);
            orders.setDeliveryTime(LocalDateTime.now());
            ordersMapper.update(orders);
        //根据运单号查询短链并删除  数据库
       String Code = sortUrlMapper.selectCodeByTrade(pickUpDTO.getTradeNo());
        sortUrlMapper.deleteCodeByTrade(pickUpDTO.getTradeNo());
        //将短链删除  redis
        Long index =0L;
        int hashCode  = Code.hashCode();
        if (hashCode<0){
            index= Math.abs(hashCode)+2147483648l;
        }else {
            index= (long) hashCode;
        }
        redisTemplate.opsForValue().setBit("short_code", index,false);

        }

    }

    @Override
    public List<CourierTradeOrderVO> queryWaybillsByDate(CourierTradeQueryDto courierTradeQueryDto) {

        return courierTradeOrderMapper.selectTradeOrderByDate(courierTradeQueryDto);
    }
}
